/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_Studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once


#include "框架/工作区/节点视口/节点构建.h"



C_节点面板* f_节点构建_物体节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_物体节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_引用物体节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_引用物体节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_天空物体节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_天空物体节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_取物体节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取物体节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_查找子物体节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_查找子物体节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_物体父子关系节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_物体父子关系节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置物体数据节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置物体数据节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_物体拷贝节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_物体拷贝节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_创建物体实例(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_创建物体实例(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_对称物体节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_对称物体节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_取物体属性节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取物体属性节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_取物体变换节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取物体变换节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_取物体矩阵节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取物体矩阵节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置物体矩阵节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置物体矩阵节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_物体绑定骨骼节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_物体绑定骨骼节点(C_节点面板* plane, C_节点基类* node);



C_节点面板* f_节点构建_设置物体变换节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置物体变换节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置物体绕轴旋转节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置物体绕轴旋转节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置物体缩放节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置物体缩放节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_设置摄像机属性节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置摄像机属性节点(C_节点面板* plane, C_节点基类* node);



C_节点面板* f_节点构建_外部加载物体节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_外部加载物体节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_加载模型节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_加载模型节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_骨骼节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_骨骼节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_骨头节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_骨头节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_骨骼IK节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_骨骼IK节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_蒙皮节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_蒙皮节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_摄像机节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_摄像机节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_目标摄像机节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_目标摄像机节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_物体虚拟体节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_物体虚拟体节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_平行光节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_平行光节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_聚光灯节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_聚光灯节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_点光源节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_点光源节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_面光源节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_面光源节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_取物体材质节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取物体材质节点(C_节点面板* plane, C_节点基类* node);

//C_节点面板* f_节点构建_取物体光追材质节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr);
//void		f_节点重置_取物体光追材质节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_选择物体节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_选择物体节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置物体中心节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置物体中心节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置物体法线节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置物体法线节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置物体绘制模式节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置物体绘制模式节点(C_节点面板* plane, C_节点基类* node);




void f_物体节点_构建函数初始化();

bool f_物体节点重构(C_节点面板** plane, C_节点基类* node, S_UI渲染环境* ctx);




